package 结构型模式.桥接模式;

/**
 * 结构
 * 抽象部分 (Abstraction): 定义抽象接口，维护一个对实现对象的引用
 * 扩展抽象部分 (Refined Abstraction): 扩展抽象部分定义的接口
 * 实现部分接口 (Implementor): 定义实现类的接口
 * 具体实现 (Concrete Implementor): 实现实现部分接口
 */
interface IColor
{
	void useColor();
}

class Red implements IColor
{
	@Override
	public void useColor() {
		System.out.println("使用红色");
	}
}

class Blue implements IColor
{

	@Override
	public void useColor() 
	{
		System.out.println("使用蓝色");	
	}
}

abstract class Shape
{
	IColor iColor;
	
	public Shape(IColor iColor)
	{
		this.iColor = iColor;
	}
	
	abstract void draw();
}

class Oblong extends Shape
{

	public Oblong(IColor iColor) {
		super(iColor);
	}

	@Override
	void draw() 
	{
		super.iColor.useColor();
		System.out.println("开始绘画正方形");	
	}
}

//在这个例子中，Shape（形状）是抽象部分，Color（颜色）是实现部分。我们可以独立地添加新的形状或颜色而不影响另一方。
public class Bridge 
{
	public static void main(String[] args) 
	{
		Oblong oblong = new Oblong(new Red());
		oblong.draw();
		Oblong o = new Oblong(new Blue());
		o.draw();
	}
}
